package com.sun.designpatternsdemo.templatemethod

import android.os.Bundle
import com.sun.designpatternsdemo.R
import com.sun.designpatternsdemo.app.AppConstant
import com.sun.designpatternsdemo.app.EMTagHandler
import com.sun.designpatternsdemo.base.BaseActivity
import com.sun.designpatternsdemo.databinding.ActivityTemplateMethodBinding
import com.sun.designpatternsdemo.templatemethod.bean.*

/**
 * 模版方法模式 展现程序员的一天
 * 定义：定义了一个算法的骨架，而将一些步骤延迟到子类中，模版方法使得子类可以在不改变算法结构的情况下，重新定义算法的步骤。
 * 以公司人员一天上班为例:
 * 简单描述一下：本公司有程序猿、测试、HR、项目经理等人，下面使用模版方法模式，记录下所有人员的上班情况：
 * <p>
 * 模版方式里面也可以可选的设置钩子，比如现在希望记录程序员离开公司的时间，我们就可以在超类中添加一个钩子：
 */
class TemplateMethodActivity : BaseActivity<ActivityTemplateMethodBinding>() {

    override fun layoutId(): Int = R.layout.activity_template_method

    override fun initView(savedInstanceState: Bundle?) {
        title = "模板方法模式"
        mDataBind.apply {
            tvDefine.text = EMTagHandler.fromHtml(AppConstant.TEMPLATE_METHOD_DEFINE)
            btTemplateMethodText2.apply {
                text = "查看程序猿离开公司的时间"
            }.setOnClickListener { // 查看所有人员的工作情况
                ITWorker("武器大师").workOneDay()
            }
            btTemplateMethodText.apply {
                text = "查看所有人员的工作情况"
            }.setOnClickListener {
                ITWorker("德马西亚").workOneDay()
                HRWorker("德邦总管").workOneDay()
                QAWorker("疾风剑豪").workOneDay()
                QAWorker("破败之王").workOneDay()
                CTOWorker("铁血剑豪").workOneDay()
                OtherWorker("无双剑姬").workOneDay()

            }
        }
    }
}